// C++ for the Windows Runtime v1.0.161012.5
// Copyright (c) 2016 Microsoft Corporation. All rights reserved.

#pragma once

#include "Windows.UI.ApplicationSettings.1.h"
#include "Windows.UI.Popups.2.h"

WINRT_EXPORT namespace winrt {

namespace ABI::Windows::Foundation::Collections {

#ifndef WINRT_GENERIC_d376abf3_f0c1_5233_9f42_de531884963e
#define WINRT_GENERIC_d376abf3_f0c1_5233_9f42_de531884963e
template <> struct __declspec(uuid("d376abf3-f0c1-5233-9f42-de531884963e")) __declspec(novtable) IVector<Windows::UI::ApplicationSettings::WebAccountProviderCommand> : impl_IVector<Windows::UI::ApplicationSettings::WebAccountProviderCommand> {};
#endif

#ifndef WINRT_GENERIC_64e864c8_7fef_5df5_a624_50b577f48554
#define WINRT_GENERIC_64e864c8_7fef_5df5_a624_50b577f48554
template <> struct __declspec(uuid("64e864c8-7fef-5df5-a624-50b577f48554")) __declspec(novtable) IVector<Windows::UI::ApplicationSettings::WebAccountCommand> : impl_IVector<Windows::UI::ApplicationSettings::WebAccountCommand> {};
#endif

#ifndef WINRT_GENERIC_b6af1cb5_f60e_5b08_b312_2eb51135cfc6
#define WINRT_GENERIC_b6af1cb5_f60e_5b08_b312_2eb51135cfc6
template <> struct __declspec(uuid("b6af1cb5-f60e-5b08-b312-2eb51135cfc6")) __declspec(novtable) IVector<Windows::UI::ApplicationSettings::CredentialCommand> : impl_IVector<Windows::UI::ApplicationSettings::CredentialCommand> {};
#endif

#ifndef WINRT_GENERIC_10bd9cdd_3767_5e96_9022_f00f9cbd6241
#define WINRT_GENERIC_10bd9cdd_3767_5e96_9022_f00f9cbd6241
template <> struct __declspec(uuid("10bd9cdd-3767-5e96-9022-f00f9cbd6241")) __declspec(novtable) IVector<Windows::UI::ApplicationSettings::SettingsCommand> : impl_IVector<Windows::UI::ApplicationSettings::SettingsCommand> {};
#endif


}

namespace ABI::Windows::Foundation {

#ifndef WINRT_GENERIC_69b8847e_7d72_5a15_bc1c_4ca39c93b162
#define WINRT_GENERIC_69b8847e_7d72_5a15_bc1c_4ca39c93b162
template <> struct __declspec(uuid("69b8847e-7d72-5a15-bc1c-4ca39c93b162")) __declspec(novtable) TypedEventHandler<Windows::UI::ApplicationSettings::AccountsSettingsPane, Windows::UI::ApplicationSettings::AccountsSettingsPaneCommandsRequestedEventArgs> : impl_TypedEventHandler<Windows::UI::ApplicationSettings::AccountsSettingsPane, Windows::UI::ApplicationSettings::AccountsSettingsPaneCommandsRequestedEventArgs> {};
#endif

#ifndef WINRT_GENERIC_f39a56a2_7db1_5c48_9e13_7dc485a4a99e
#define WINRT_GENERIC_f39a56a2_7db1_5c48_9e13_7dc485a4a99e
template <> struct __declspec(uuid("f39a56a2-7db1-5c48-9e13-7dc485a4a99e")) __declspec(novtable) TypedEventHandler<Windows::UI::ApplicationSettings::SettingsPane, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs> : impl_TypedEventHandler<Windows::UI::ApplicationSettings::SettingsPane, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs> {};
#endif


}

namespace ABI::Windows::Foundation::Collections {

#ifndef WINRT_GENERIC_82d7cd74_8e33_5f06_92fc_915138aacbde
#define WINRT_GENERIC_82d7cd74_8e33_5f06_92fc_915138aacbde
template <> struct __declspec(uuid("82d7cd74-8e33-5f06-92fc-915138aacbde")) __declspec(novtable) IIterator<Windows::UI::ApplicationSettings::WebAccountProviderCommand> : impl_IIterator<Windows::UI::ApplicationSettings::WebAccountProviderCommand> {};
#endif

#ifndef WINRT_GENERIC_15165367_2e93_59a6_b5c7_16d3b58fd2e7
#define WINRT_GENERIC_15165367_2e93_59a6_b5c7_16d3b58fd2e7
template <> struct __declspec(uuid("15165367-2e93-59a6-b5c7-16d3b58fd2e7")) __declspec(novtable) IIterable<Windows::UI::ApplicationSettings::WebAccountProviderCommand> : impl_IIterable<Windows::UI::ApplicationSettings::WebAccountProviderCommand> {};
#endif

#ifndef WINRT_GENERIC_b2d19260_1827_5d88_b948_9688cfcd63ae
#define WINRT_GENERIC_b2d19260_1827_5d88_b948_9688cfcd63ae
template <> struct __declspec(uuid("b2d19260-1827-5d88-b948-9688cfcd63ae")) __declspec(novtable) IVectorView<Windows::UI::ApplicationSettings::WebAccountProviderCommand> : impl_IVectorView<Windows::UI::ApplicationSettings::WebAccountProviderCommand> {};
#endif

#ifndef WINRT_GENERIC_8cbb62b6_bd9c_5486_9d14_9cc4627b32d4
#define WINRT_GENERIC_8cbb62b6_bd9c_5486_9d14_9cc4627b32d4
template <> struct __declspec(uuid("8cbb62b6-bd9c-5486-9d14-9cc4627b32d4")) __declspec(novtable) IIterator<Windows::UI::ApplicationSettings::WebAccountCommand> : impl_IIterator<Windows::UI::ApplicationSettings::WebAccountCommand> {};
#endif

#ifndef WINRT_GENERIC_bd0d999c_b2ba_51b2_bcc0_d4a5cd821555
#define WINRT_GENERIC_bd0d999c_b2ba_51b2_bcc0_d4a5cd821555
template <> struct __declspec(uuid("bd0d999c-b2ba-51b2-bcc0-d4a5cd821555")) __declspec(novtable) IIterable<Windows::UI::ApplicationSettings::WebAccountCommand> : impl_IIterable<Windows::UI::ApplicationSettings::WebAccountCommand> {};
#endif

#ifndef WINRT_GENERIC_207eaa3e_5ec9_5bd4_a1d2_73179a8128a8
#define WINRT_GENERIC_207eaa3e_5ec9_5bd4_a1d2_73179a8128a8
template <> struct __declspec(uuid("207eaa3e-5ec9-5bd4-a1d2-73179a8128a8")) __declspec(novtable) IVectorView<Windows::UI::ApplicationSettings::WebAccountCommand> : impl_IVectorView<Windows::UI::ApplicationSettings::WebAccountCommand> {};
#endif

#ifndef WINRT_GENERIC_9f1177f1_85bb_5cd0_9b08_a0b47a764c75
#define WINRT_GENERIC_9f1177f1_85bb_5cd0_9b08_a0b47a764c75
template <> struct __declspec(uuid("9f1177f1-85bb-5cd0-9b08-a0b47a764c75")) __declspec(novtable) IIterator<Windows::UI::ApplicationSettings::CredentialCommand> : impl_IIterator<Windows::UI::ApplicationSettings::CredentialCommand> {};
#endif

#ifndef WINRT_GENERIC_883ed18d_4dbb_58f2_8fd2_e4b018509553
#define WINRT_GENERIC_883ed18d_4dbb_58f2_8fd2_e4b018509553
template <> struct __declspec(uuid("883ed18d-4dbb-58f2-8fd2-e4b018509553")) __declspec(novtable) IIterable<Windows::UI::ApplicationSettings::CredentialCommand> : impl_IIterable<Windows::UI::ApplicationSettings::CredentialCommand> {};
#endif

#ifndef WINRT_GENERIC_95cc1bba_c279_5ee5_a524_78012b7fe17e
#define WINRT_GENERIC_95cc1bba_c279_5ee5_a524_78012b7fe17e
template <> struct __declspec(uuid("95cc1bba-c279-5ee5-a524-78012b7fe17e")) __declspec(novtable) IVectorView<Windows::UI::ApplicationSettings::CredentialCommand> : impl_IVectorView<Windows::UI::ApplicationSettings::CredentialCommand> {};
#endif

#ifndef WINRT_GENERIC_2f071c24_4a58_5a00_a294_c7162e98c2a0
#define WINRT_GENERIC_2f071c24_4a58_5a00_a294_c7162e98c2a0
template <> struct __declspec(uuid("2f071c24-4a58-5a00-a294-c7162e98c2a0")) __declspec(novtable) IIterator<Windows::UI::ApplicationSettings::SettingsCommand> : impl_IIterator<Windows::UI::ApplicationSettings::SettingsCommand> {};
#endif

#ifndef WINRT_GENERIC_6308e7e8_cb85_5339_a3e9_9a7500d19c68
#define WINRT_GENERIC_6308e7e8_cb85_5339_a3e9_9a7500d19c68
template <> struct __declspec(uuid("6308e7e8-cb85-5339-a3e9-9a7500d19c68")) __declspec(novtable) IIterable<Windows::UI::ApplicationSettings::SettingsCommand> : impl_IIterable<Windows::UI::ApplicationSettings::SettingsCommand> {};
#endif

#ifndef WINRT_GENERIC_67b64d17_4245_5d7c_bfb4_6b68dd525877
#define WINRT_GENERIC_67b64d17_4245_5d7c_bfb4_6b68dd525877
template <> struct __declspec(uuid("67b64d17-4245-5d7c-bfb4-6b68dd525877")) __declspec(novtable) IVectorView<Windows::UI::ApplicationSettings::SettingsCommand> : impl_IVectorView<Windows::UI::ApplicationSettings::SettingsCommand> {};
#endif


}

namespace Windows::UI::ApplicationSettings {

template <typename D>
struct WINRT_EBO impl_IAccountsSettingsPane
{
    event_token AccountCommandsRequested(const Windows::Foundation::TypedEventHandler<Windows::UI::ApplicationSettings::AccountsSettingsPane, Windows::UI::ApplicationSettings::AccountsSettingsPaneCommandsRequestedEventArgs> & handler) const;
    using AccountCommandsRequested_revoker = event_revoker<IAccountsSettingsPane>;
    AccountCommandsRequested_revoker AccountCommandsRequested(auto_revoke_t, const Windows::Foundation::TypedEventHandler<Windows::UI::ApplicationSettings::AccountsSettingsPane, Windows::UI::ApplicationSettings::AccountsSettingsPaneCommandsRequestedEventArgs> & handler) const;
    void AccountCommandsRequested(event_token cookie) const;
};

template <typename D>
struct WINRT_EBO impl_IAccountsSettingsPaneCommandsRequestedEventArgs
{
    Windows::Foundation::Collections::IVector<Windows::UI::ApplicationSettings::WebAccountProviderCommand> WebAccountProviderCommands() const;
    Windows::Foundation::Collections::IVector<Windows::UI::ApplicationSettings::WebAccountCommand> WebAccountCommands() const;
    Windows::Foundation::Collections::IVector<Windows::UI::ApplicationSettings::CredentialCommand> CredentialCommands() const;
    Windows::Foundation::Collections::IVector<Windows::UI::ApplicationSettings::SettingsCommand> Commands() const;
    hstring HeaderText() const;
    void HeaderText(hstring_ref value) const;
    Windows::UI::ApplicationSettings::AccountsSettingsPaneEventDeferral GetDeferral() const;
};

template <typename D>
struct WINRT_EBO impl_IAccountsSettingsPaneEventDeferral
{
    void Complete() const;
};

template <typename D>
struct WINRT_EBO impl_IAccountsSettingsPaneStatics
{
    Windows::UI::ApplicationSettings::AccountsSettingsPane GetForCurrentView() const;
    void Show() const;
};

template <typename D>
struct WINRT_EBO impl_IAccountsSettingsPaneStatics2
{
    Windows::Foundation::IAsyncAction ShowManageAccountsAsync() const;
    Windows::Foundation::IAsyncAction ShowAddAccountAsync() const;
};

template <typename D>
struct WINRT_EBO impl_ICredentialCommand
{
    Windows::Security::Credentials::PasswordCredential PasswordCredential() const;
    Windows::UI::ApplicationSettings::CredentialCommandCredentialDeletedHandler CredentialDeleted() const;
};

template <typename D>
struct WINRT_EBO impl_ICredentialCommandFactory
{
    Windows::UI::ApplicationSettings::CredentialCommand CreateCredentialCommand(const Windows::Security::Credentials::PasswordCredential & passwordCredential) const;
    Windows::UI::ApplicationSettings::CredentialCommand CreateCredentialCommandWithHandler(const Windows::Security::Credentials::PasswordCredential & passwordCredential, const Windows::UI::ApplicationSettings::CredentialCommandCredentialDeletedHandler & deleted) const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsCommandFactory
{
    Windows::UI::ApplicationSettings::SettingsCommand CreateSettingsCommand(const Windows::IInspectable & settingsCommandId, hstring_ref label, const Windows::UI::Popups::UICommandInvokedHandler & handler) const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsCommandStatics
{
    Windows::UI::ApplicationSettings::SettingsCommand AccountsCommand() const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsPane
{
    event_token CommandsRequested(const Windows::Foundation::TypedEventHandler<Windows::UI::ApplicationSettings::SettingsPane, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs> & handler) const;
    using CommandsRequested_revoker = event_revoker<ISettingsPane>;
    CommandsRequested_revoker CommandsRequested(auto_revoke_t, const Windows::Foundation::TypedEventHandler<Windows::UI::ApplicationSettings::SettingsPane, Windows::UI::ApplicationSettings::SettingsPaneCommandsRequestedEventArgs> & handler) const;
    void CommandsRequested(event_token cookie) const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsPaneCommandsRequest
{
    Windows::Foundation::Collections::IVector<Windows::UI::ApplicationSettings::SettingsCommand> ApplicationCommands() const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsPaneCommandsRequestedEventArgs
{
    Windows::UI::ApplicationSettings::SettingsPaneCommandsRequest Request() const;
};

template <typename D>
struct WINRT_EBO impl_ISettingsPaneStatics
{
    Windows::UI::ApplicationSettings::SettingsPane GetForCurrentView() const;
    void Show() const;
    Windows::UI::ApplicationSettings::SettingsEdgeLocation Edge() const;
};

template <typename D>
struct WINRT_EBO impl_IWebAccountCommand
{
    Windows::Security::Credentials::WebAccount WebAccount() const;
    Windows::UI::ApplicationSettings::WebAccountCommandInvokedHandler Invoked() const;
    Windows::UI::ApplicationSettings::SupportedWebAccountActions Actions() const;
};

template <typename D>
struct WINRT_EBO impl_IWebAccountCommandFactory
{
    Windows::UI::ApplicationSettings::WebAccountCommand CreateWebAccountCommand(const Windows::Security::Credentials::WebAccount & webAccount, const Windows::UI::ApplicationSettings::WebAccountCommandInvokedHandler & invoked, Windows::UI::ApplicationSettings::SupportedWebAccountActions actions) const;
};

template <typename D>
struct WINRT_EBO impl_IWebAccountInvokedArgs
{
    Windows::UI::ApplicationSettings::WebAccountAction Action() const;
};

template <typename D>
struct WINRT_EBO impl_IWebAccountProviderCommand
{
    Windows::Security::Credentials::WebAccountProvider WebAccountProvider() const;
    Windows::UI::ApplicationSettings::WebAccountProviderCommandInvokedHandler Invoked() const;
};

template <typename D>
struct WINRT_EBO impl_IWebAccountProviderCommandFactory
{
    Windows::UI::ApplicationSettings::WebAccountProviderCommand CreateWebAccountProviderCommand(const Windows::Security::Credentials::WebAccountProvider & webAccountProvider, const Windows::UI::ApplicationSettings::WebAccountProviderCommandInvokedHandler & invoked) const;
};

struct CredentialCommandCredentialDeletedHandler : Windows::IUnknown
{
    CredentialCommandCredentialDeletedHandler(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<CredentialCommandCredentialDeletedHandler>(m_ptr); }
    template <typename L> CredentialCommandCredentialDeletedHandler(L lambda);
    template <typename F> CredentialCommandCredentialDeletedHandler (F * function);
    template <typename O, typename M> CredentialCommandCredentialDeletedHandler(O * object, M method);
    void operator()(const Windows::UI::ApplicationSettings::CredentialCommand & command) const;
};

struct WebAccountCommandInvokedHandler : Windows::IUnknown
{
    WebAccountCommandInvokedHandler(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<WebAccountCommandInvokedHandler>(m_ptr); }
    template <typename L> WebAccountCommandInvokedHandler(L lambda);
    template <typename F> WebAccountCommandInvokedHandler (F * function);
    template <typename O, typename M> WebAccountCommandInvokedHandler(O * object, M method);
    void operator()(const Windows::UI::ApplicationSettings::WebAccountCommand & command, const Windows::UI::ApplicationSettings::WebAccountInvokedArgs & args) const;
};

struct WebAccountProviderCommandInvokedHandler : Windows::IUnknown
{
    WebAccountProviderCommandInvokedHandler(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<WebAccountProviderCommandInvokedHandler>(m_ptr); }
    template <typename L> WebAccountProviderCommandInvokedHandler(L lambda);
    template <typename F> WebAccountProviderCommandInvokedHandler (F * function);
    template <typename O, typename M> WebAccountProviderCommandInvokedHandler(O * object, M method);
    void operator()(const Windows::UI::ApplicationSettings::WebAccountProviderCommand & command) const;
};

struct IAccountsSettingsPane :
    Windows::IInspectable,
    impl::consume<IAccountsSettingsPane>
{
    IAccountsSettingsPane(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IAccountsSettingsPane>(m_ptr); }
};

struct IAccountsSettingsPaneCommandsRequestedEventArgs :
    Windows::IInspectable,
    impl::consume<IAccountsSettingsPaneCommandsRequestedEventArgs>
{
    IAccountsSettingsPaneCommandsRequestedEventArgs(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IAccountsSettingsPaneCommandsRequestedEventArgs>(m_ptr); }
};

struct IAccountsSettingsPaneEventDeferral :
    Windows::IInspectable,
    impl::consume<IAccountsSettingsPaneEventDeferral>
{
    IAccountsSettingsPaneEventDeferral(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IAccountsSettingsPaneEventDeferral>(m_ptr); }
};

struct IAccountsSettingsPaneStatics :
    Windows::IInspectable,
    impl::consume<IAccountsSettingsPaneStatics>
{
    IAccountsSettingsPaneStatics(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IAccountsSettingsPaneStatics>(m_ptr); }
};

struct IAccountsSettingsPaneStatics2 :
    Windows::IInspectable,
    impl::consume<IAccountsSettingsPaneStatics2>,
    impl::require<IAccountsSettingsPaneStatics2, Windows::UI::ApplicationSettings::IAccountsSettingsPaneStatics>
{
    IAccountsSettingsPaneStatics2(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IAccountsSettingsPaneStatics2>(m_ptr); }
};

struct ICredentialCommand :
    Windows::IInspectable,
    impl::consume<ICredentialCommand>
{
    ICredentialCommand(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ICredentialCommand>(m_ptr); }
};

struct ICredentialCommandFactory :
    Windows::IInspectable,
    impl::consume<ICredentialCommandFactory>
{
    ICredentialCommandFactory(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ICredentialCommandFactory>(m_ptr); }
};

struct ISettingsCommandFactory :
    Windows::IInspectable,
    impl::consume<ISettingsCommandFactory>
{
    ISettingsCommandFactory(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsCommandFactory>(m_ptr); }
};

struct ISettingsCommandStatics :
    Windows::IInspectable,
    impl::consume<ISettingsCommandStatics>
{
    ISettingsCommandStatics(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsCommandStatics>(m_ptr); }
};

struct ISettingsPane :
    Windows::IInspectable,
    impl::consume<ISettingsPane>
{
    ISettingsPane(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsPane>(m_ptr); }
};

struct ISettingsPaneCommandsRequest :
    Windows::IInspectable,
    impl::consume<ISettingsPaneCommandsRequest>
{
    ISettingsPaneCommandsRequest(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsPaneCommandsRequest>(m_ptr); }
};

struct ISettingsPaneCommandsRequestedEventArgs :
    Windows::IInspectable,
    impl::consume<ISettingsPaneCommandsRequestedEventArgs>
{
    ISettingsPaneCommandsRequestedEventArgs(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsPaneCommandsRequestedEventArgs>(m_ptr); }
};

struct ISettingsPaneStatics :
    Windows::IInspectable,
    impl::consume<ISettingsPaneStatics>
{
    ISettingsPaneStatics(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<ISettingsPaneStatics>(m_ptr); }
};

struct IWebAccountCommand :
    Windows::IInspectable,
    impl::consume<IWebAccountCommand>
{
    IWebAccountCommand(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IWebAccountCommand>(m_ptr); }
};

struct IWebAccountCommandFactory :
    Windows::IInspectable,
    impl::consume<IWebAccountCommandFactory>
{
    IWebAccountCommandFactory(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IWebAccountCommandFactory>(m_ptr); }
};

struct IWebAccountInvokedArgs :
    Windows::IInspectable,
    impl::consume<IWebAccountInvokedArgs>
{
    IWebAccountInvokedArgs(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IWebAccountInvokedArgs>(m_ptr); }
};

struct IWebAccountProviderCommand :
    Windows::IInspectable,
    impl::consume<IWebAccountProviderCommand>
{
    IWebAccountProviderCommand(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IWebAccountProviderCommand>(m_ptr); }
};

struct IWebAccountProviderCommandFactory :
    Windows::IInspectable,
    impl::consume<IWebAccountProviderCommandFactory>
{
    IWebAccountProviderCommandFactory(std::nullptr_t = nullptr) noexcept {}
    auto operator->() const noexcept { return ptr<IWebAccountProviderCommandFactory>(m_ptr); }
};

}

}
